package minCapability;

import java.util.Arrays;

public class Solution {
    public int minCapability(int[] nums, int k) {
        // 至少偷K间房屋
        // 最大值的最小值问题
        // 假设最小值是y
        // f(y)表示最大值是y的情况下小偷能偷多少房间
        // f(y)>=k
        int l = Arrays.stream(nums).min().getAsInt();
        int r = Arrays.stream(nums).max().getAsInt();
        while (l<=r){
            int mid = (l+r)/2;
            int t = check(nums,mid);
            if(t<k){
               l = mid+1;
            } else {
                r = mid-1;
            }
        }
        return l;
    }
    private int check(int[] nums,int mx) {
        int cnt = 0, n = nums.length;
        for (int i = 0; i < n; i++) {
            if (nums[i] <= mx) {
                cnt++; // 偷 nums[i]
                i++; // 跳过下一间房子
            }
        }
        return cnt;
    }
}
